﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using ProjControleDAL;
using ProjControleModelos;
namespace ProjControleBLL
{
   public class OrcamentoBLL
   {
       OrcamentosDAL objDAL;
       #region Métodos do produto do orçamento
       public void carregaListaProdutos(Orcamentos objO)
       {
           Orcamento_ProdutoBLL objOrcaProd = new Orcamento_ProdutoBLL();
           Orcamento_Produtos objOP = new Orcamento_Produtos();
           DataTable tab = null;
           try
           {
               tab = objOrcaProd.localizar(objO);
               objO.lProdutos.Clear();
               foreach (DataRow linha in tab.Rows)
               {//até aqui ta ok
                   objOP.cod_orcamento = int.Parse(linha["cod_orcamento"].ToString());
                   objOP.cod_produto = int.Parse(linha["cod_produto"].ToString());
                   objOP.qtd_produto = int.Parse(linha["qntd_produto"].ToString());
                   objOP.val_produto = Double.Parse(linha["valor_produto"].ToString());
                   objO.lProdutos.Add(objOP);
                   objOP = new Orcamento_Produtos();
               }
           }
           catch (Exception ex)
           {
               throw ex;
           }
           objOrcaProd = null;
           objOP = null;
       }
       public void cadastraProdOrcamentos(Orcamentos objO)
       {
           Orcamento_ProdutoBLL objOPBLL;
           try
           {
               foreach (Orcamento_Produtos obj in objO.lProdutos)
               {
                   obj.cod_orcamento = objO.cod_orcamento;
                   objOPBLL = new Orcamento_ProdutoBLL();
                   objOPBLL.inserir(obj);
               }
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           objOPBLL = null;
       }
       public void carrega(Orcamentos objO)
       {
           DataTable tab;
           Orcamento_ProdutoBLL objOBLL;
           Orcamento_Produtos objOP;
           try
           {
               objOBLL = new Orcamento_ProdutoBLL();
               objOP = new Orcamento_Produtos();
               tab = objOBLL.localizar(objO);
               if (tab.Rows.Count > 0)
               {
                   objOP.cod_produto = int.Parse(tab.Rows[0]["cod_produto"].ToString());
                   objOP.qtd_produto = int.Parse(tab.Rows[0]["qntd_produto"].ToString());
                   objOP.val_produto = Double.Parse(tab.Rows[0]["valor_produto"].ToString());
                   carregaListaProdutos(objO);
               }
                    
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
       }
       #endregion
       #region Métodos
       //inserir
       public void inserir(Orcamentos objO)
       {
           try
           {
               if (objO.cod_cliente == 0 || objO.cod_funcionario == 0 || objO.val_negociado == 0 || objO.val_orcamento == 0 || objO.qntd_parc_orcamento == 0)
                   throw new Exception("Campos Obrigatórios Invalidos");
               else
               {
                   objDAL = new OrcamentosDAL();
                   objDAL.inserir(objO);
                   cadastraProdOrcamentos(objO);
               }
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           objDAL = null;
       }
       public void alterar(Orcamentos objO)
       {
           try
           {
               if (objO.cod_orcamento == 0 || objO.cod_cliente == 0 || objO.cod_funcionario == 0)
                   throw new Exception("Campos Obrigatórios não preenchidos");
               else
               {
                   objDAL = new OrcamentosDAL();
                   objDAL.alterar(objO);
                   Orcamento_ProdutoBLL objOP = new Orcamento_ProdutoBLL();
                   objOP.excluirTodos(objO);
                   cadastraProdOrcamentos(objO);
               }
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           objDAL = null;
       }
       public void excluir(Orcamentos objO)
       {
           try
           {
               if (objO.cod_orcamento == 0)
                   throw new Exception("Campo obrigatório não preenchido");
               else
               {
                   objDAL = new OrcamentosDAL();
                   Orcamento_ProdutoBLL objOP = new Orcamento_ProdutoBLL();
                   objOP.excluirTodos(objO);
                   objDAL.excluir(objO);
               }
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           objDAL = null;
       }
       public Orcamentos localizar(int codigo)
       {
           Orcamentos objO = null;
           try
           {
               objDAL = new OrcamentosDAL();
               objO = objDAL.localizar(codigo);
               carrega(objO);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           objDAL = null;
           return objO;
       }
       public DataTable localizar(String nome)
       {
           DataTable tab;
           try
           {
               objDAL = new OrcamentosDAL();
               tab = objDAL.localizar(nome);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           objDAL = null;
           return tab;
       }

       #endregion
   }
}
